using CommunityToolkit.Mvvm.Messaging.Messages;
using ImageCSharp.Core.Models;

namespace ImageCSharp.Core.Events
{
    /// <summary>
    /// 图像文档变更事件
    /// </summary>
    public class ImageDocumentChangedEvent : ValueChangedMessage<ImageDocument>
    {
        public ImageDocumentChangedEvent(ImageDocument value) : base(value)
        {
        }
    }

    /// <summary>
    /// 工具变更事件
    /// </summary>
    public class ToolChangedEvent : ValueChangedMessage<Tool>
    {
        public ToolChangedEvent(Tool value) : base(value)
        {
        }
    }

    /// <summary>
    /// 选择区域变更事件
    /// </summary>
    public class SelectionChangedEvent : ValueChangedMessage<SixLabors.ImageSharp.RectangleF>
    {
        public SelectionChangedEvent(SixLabors.ImageSharp.RectangleF value) : base(value)
        {
        }
    }

    /// <summary>
    /// 缩放级别变更事件
    /// </summary>
    public class ZoomLevelChangedEvent : ValueChangedMessage<float>
    {
        public ZoomLevelChangedEvent(float value) : base(value)
        {
        }
    }

    /// <summary>
    /// 状态栏消息事件
    /// </summary>
    public class StatusMessageEvent : ValueChangedMessage<string>
    {
        public StatusMessageEvent(string value) : base(value)
        {
        }
    }

    /// <summary>
    /// 操作历史事件
    /// </summary>
    public class HistoryChangedEvent : ValueChangedMessage<string>
    {
        public HistoryChangedEvent(string value) : base(value)
        {
        }
    }

    /// <summary>
    /// 测量完成事件
    /// </summary>
    public class MeasurementCompletedEvent : ValueChangedMessage<MeasurementResult>
    {
        public MeasurementCompletedEvent(MeasurementResult value) : base(value)
        {
        }
    }

    /// <summary>
    /// 滤镜应用事件
    /// </summary>
    public class FilterAppliedEvent : ValueChangedMessage<string>
    {
        public FilterAppliedEvent(string value) : base(value)
        {
        }
    }

    /// <summary>
    /// 图像处理进度事件
    /// </summary>
    public class ProcessingProgressEvent : ValueChangedMessage<float>
    {
        public ProcessingProgressEvent(float value) : base(value)
        {
        }
    }

    /// <summary>
    /// 错误消息事件
    /// </summary>
    public class ErrorMessageEvent : ValueChangedMessage<string>
    {
        public ErrorMessageEvent(string value) : base(value)
        {
        }
    }

    /// <summary>
    /// 警告消息事件
    /// </summary>
    public class WarningMessageEvent : ValueChangedMessage<string>
    {
        public WarningMessageEvent(string value) : base(value)
        {
        }
    }

    /// <summary>
    /// 批处理开始事件
    /// </summary>
    public class BatchProcessStartedEvent : ValueChangedMessage<int>
    {
        public BatchProcessStartedEvent(int value) : base(value)
        {
        }
    }

    /// <summary>
    /// 批处理完成事件
    /// </summary>
    public class BatchProcessCompletedEvent : ValueChangedMessage<bool>
    {
        public BatchProcessCompletedEvent(bool value) : base(value)
        {
        }
    }

    /// <summary>
    /// 批处理进度事件
    /// </summary>
    public class BatchProcessProgressEvent : ValueChangedMessage<int>
    {
        public BatchProcessProgressEvent(int value) : base(value)
        {
        }
    }
}